<?php
/**
*  @package :  class.tool
*  @classID :  Preg.class.php
*  @author  :  lee
*  @date    :  2014-10-29
*  正则验证类
*/

class Preg {
    
    //去除空格符
    static function isUsername($value,$type='ENNUM',$minLen='4',$maxLen="20"){
        $value = self::strTrim($value);
		if(!$value){
            return false;
        }
        if(self::newsubstr($value)<$minLen){
            return false;
        }else{
            switch($type){
                case 'EN': //纯英文
                    return preg_match("/^[a-zA-Z]{".$minLen.",".$maxLen."}$/iu",$value) ? true : false;
                    break;
                case 'ENNUM': //英文数字
                    return preg_match("/^[a-zA-Z0-9]{".$minLen.",".$maxLen."}$/iu",$value) ? true :false;
                    break;
                case 'CN': //汉字
                    //chr(0xa1)."-".chr(0xff) gb2312   \x{4e00}-\x{9fa5} utf8
                    $minLen = $minLen*2;
                    $maxLen = $maxLen*2;
                    return preg_match("/^[\x80-\xff]{".$minLen.",".$maxLen."}$/iu",$value)?true:false;
                    break;
                case 'NUM': //数字
                    return preg_match("/^[0-9]{".$minLen.",".$maxLen."}/",$value) ? true : false;
                    break;
                case 'CNEN': //中英文
                    $maxLen = $maxLen*2;
                    return preg_match("/^[\x80-\xffa-zA-Z]{".$minLen.",".$maxLen."}$/",$value) ? true : false;
                    break;
                   
                case 'ALL': //中英文数字
                    $maxLen = $maxLen*2;
                    return preg_match("/^[\x80-\xffa-zA-Z0-9_]{".$minLen.",".$maxLen."}$/",$value) ? true : false;
                    break;
            }
        }
    }
    
    //验证用户名

    static function strTrim($str){
        return preg_replace("/\s+/","",$str);
    }
  
    //验证密码 6-20位非中文

    static function isPassword($value,$minLen='6',$maxLen='20'){
        //$match = "/^[^\u4E00-\u9FA5\uf900-\ufa2d\s]{6,20}$/";
        $value = self::strTrim($value);
		if(!$value){
            return false;
        }
        return preg_match("/^[^\x80-\xff]{".$minLen.",".$maxLen."}$/",$value) ? true : false;
    }
    
    //验证邮箱 $match 可自定义
    static function isEmail($value,$match = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2,3})?)$/i"){
       //"/^([A-Za-z0-9_.-]+)@(([A-Za-z0-9-])+.)+([A-Za-z0-9]{2,4})+$/"
        $value = self::strTrim($value);
		if(!$value){
            return false;
        }
        return preg_match($match,strtolower($value)) ? true : false;
        
    }
    
    //验证电话号码　
    static function isTel($value,$match="/^(0\d{2,3})-(\d{7,8})$/"){
        //国际版　$match = '/^[+]?([0-9]){1,3}?[-|]?(0[1-9]{2,3})(-|)?\d{7,8}$/' ;
        $value  = self::strTrim($value);
		if(!$value){
            return false;
        }
        return preg_match($match,$value) ? true:false;
    
    }
    //验证手机号码
    static function isMobile($value,$match="/^(0)?1([3|4|5|7|8])([0-9]){9}$/"){
        //国际版 $match ="/^([0-9]{1,5}|0)?1([3|4|5|7|8])+([0-9]){9,10}$/"
        $value = self::strTrim($value);
		if(!$value){
            return false;
        }
        return preg_match($match,$value) ? true : false;
    }
    //验证身份证
    static function isCard($value){
        $value =  self::strTrim($value);
		if(!$value){
            return false;
        }
        return preg_match("/^([0-9]{15}|[0-9]{17}[0-9a-z])$/i",$value) ? true : false;
    }
    //验证URL
    static function isUrl($value){
        $value = strtolower(self::strTrim($value));
		if(!$value){
            return false;
        }
        $match = "/^(http:\/\/)?([\w\d-]+\.)+[\w-]+(\/[\d\w-.\/?%&=]*)?$/";
        return preg_match($match,$value) ? true : false;
    }
	//验证QQ
	static function isQq($value){
		$value = self::strTrim($value);
 	    if(!$value){
            return false;
        }
		$match = "/^[1-9]\d{4,13}$/";
		return preg_match($match,$value) ? true : false;
	
	}
    //验证公司名 
    static function isCorpName($value){
        $value = self::strTrim($value);
       	if(!$value){
            return false;
        }
      //  return preg_match("/^([\x80-\xffa-zA-Z]{4,100})$/",$value) ? true : false;
        return preg_match("/^([^0-9]{4,100})$/",$value) ? true : false;
    }
    
    //验证任意字符长度范围
    static function isAll($value,$minLen='6',$maxLen='20'){
        $value = self::strTrim($value);
       	if(!$value){
            return false;
        }
        //var_dump(self::newsubstr($value));
        return (self::newsubstr($value)>=$minLen && self::newsubstr($value )<=$maxLen) ?  true:false;
    }


    static function newsubstr($str) {   
        //$newstr =  (strlen($str) + mb_strlen($str,'gb2312')) / 3; 
        $newstr = mb_strlen($str,'gb2312');
        return $newstr;   
    }


    //验证24小时格式 HH::MM
    static function isHHMM($value){
        $value = self::strTrim($value);
        if(!$value){
            return false;
        }
        return preg_match("/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/", $value) ? true : false;
    }

    static function isCn($value){
        if(preg_match("/^[\x80-\xff]+$/", $value)){
            return true;
        }else{
            return false;
        }
    }
    
    /*check date is in YYYY-mm-dd format*/
    public static function isDate($value)
    {
        if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$value))
        {
            return true;
        }else{
            return false;
        }
    }


}
?>